package com.jzxk.tool;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * @author 今朝惜客
 * @CreateTime : 16/9/8 下午3:48
 * @Description : 时间工具类
 *
 */
public class DateUtils {

	public static final String TIME_STAMP="yyyy-MM-dd HH:mm:ss";

	public static final String TIME_STAMPS="yyyy-MM-dd HH:mm:ss.S";

	public static final String DATE_STAMP="yyyy-MM-dd";

	public static final String TIMESTAMP="yyyyMMddhhmmss";

	/**
	 * 分钟
	 */
	public static final int TYPE_MINUTE=0;

	/**
	 *秒
	 */
	public static final int TYPE_SECOND=1;

	/**
	 * Date转字符串
	 * @param date 时间
	 * @param template 格式
	 * @return
	 */
	public static String format(Date date,String template){

		if (date==null){
			return "Date is not null";
		}

		if ("".equals(template)||template==null){
			return "Template is not null";
		}


		SimpleDateFormat simpleDateFormat=new SimpleDateFormat(template);
		return simpleDateFormat.format(date);
	}

	/**
	 * 字符串转Date
	 * @param timeStamp 时间
	 * @param template 格式
	 * @return
	 * @throws ParseException
	 */
	public static Date parse(String timeStamp,String template) throws ParseException {

		SimpleDateFormat simpleDateFormat=new SimpleDateFormat(template);

		return simpleDateFormat.parse(timeStamp);
	}

	/**
	 * 获取当天最早时间
	 * @param date 时间
	 * @return
	 */
	public static Date getEarliest(Date date){

		Calendar calendar=Calendar.getInstance();
		calendar.setTime(date);
		setCalendarTime(calendar, 0, 0, 0, 0);
		return calendar.getTime();
	}

	/**
	 * 获取当天最后时间
	 * @param date 时间
	 * @return
	 */
	public static Date getLastest(Date date){

		Calendar calendar=Calendar.getInstance();
		calendar.setTime(date);
		setCalendarTime(calendar, 23, 59, 59, 999);
		return calendar.getTime();
	}

	/**
	 *获取时间之后N天的时间
	 * @param date 时间
	 * @param days 天数
	 * @return
	 */
	public static Date afterDays(Date date,int days){

		Calendar calendar=Calendar.getInstance();
		calendar.setTime(date);
		calendar.add(Calendar.DAY_OF_YEAR,days);
		return calendar.getTime();
	}

	/**
	 *获取时间之前N天的时间
	 * @param date 时间
	 * @param days 天数
	 * @return
	 */
	public static Date beforeDays(Date date,int days){

		return afterDays(date,-days);
	}

	/**
	 * 获取时间之后N分钟的时间
	 * @param date 时间
	 * @param minute 分钟
	 * @return
	 */
	public static Date afterMinute(Date date,int minute){

		Calendar calendar=Calendar.getInstance();
		calendar.setTime(date);
		calendar.add(Calendar.MINUTE,minute);
		return calendar.getTime();
	}

	/**
	 * 获取时间之前N分钟的时间
	 * @param date 时间
	 * @param minute 分钟
	 * @return
	 */
	public static Date beforeMinute(Date date,int minute){

		return afterMinute(date,-minute);
	}

	/**
	 * 计算时间差
	 * @param begin_date 开始时间
	 * @param end_date 结束时间
	 * @param type  类型:分钟,秒
	 * @return
	 */
	public static int countBetweenTime(Date begin_date,Date end_date,int type){

		long total_minute = 0;

		int temp=1000;
		if(TYPE_MINUTE==type){
			temp*=60;
		}

		total_minute = (end_date.getTime() - begin_date.getTime()) / (temp);
		return (int) total_minute;
	}

	/**
	 * 设置日历 时、分、秒、毫秒
	 * @param calendar
	 * @param hourOfDay
	 * @param minute
	 * @param second
	 * @param milliSecond
	 */
	private static void setCalendarTime(Calendar calendar,int hourOfDay, int minute, int second, int milliSecond) {

		calendar.set(Calendar.HOUR_OF_DAY,hourOfDay);
		calendar.set(Calendar.MINUTE,minute);
		calendar.set(Calendar.SECOND,second);
		calendar.set(Calendar.MILLISECOND,milliSecond);
	}
}
